package com.zx.flow.db;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zx.flow.api.config.FlowConfig;
import com.zx.flow.api.execute.model.FlowContext;
import com.zx.flow.api.execute.model.FlowNode;
import com.zx.flow.api.execute.request.manager.ManagerFlowConfigListForm;
import com.zx.flow.api.execute.request.manager.ManagerFlowListForm;
import com.zx.flow.db.entity.FlowSecretEntity;
import java.util.List;

/**
 * 流程先关处理
 */
public interface FlowStorageHandler {

    /**
     * 获得安全信息
     *
     * @return
     */
    List<FlowSecretEntity> getSecret();

    /**
     * 查询流程列表
     *
     * @return
     */
    IPage<FlowContext> getFlowList(ManagerFlowListForm form);

    /**
     * 查询流程配置列表
     *
     * @return
     */
    IPage<FlowConfig> getFlowConfigList(ManagerFlowConfigListForm form);

    /**
     * 查询所有流程配置
     *
     * @return
     */
    List<FlowConfig> getAllFlowConfig();

    /**
     * 保存流程配置
     *
     * @param flowConfig
     */
    void saveFlowConfig(FlowConfig flowConfig);

    /**
     * 保存流程，新增或更新
     *
     * @param flowContext
     */
    void saveFlow(FlowContext flowContext);

    /**
     * 查询一个流程
     *
     * @param flowId
     * @return
     */
    FlowContext getFlow(String flowId);

    /**
     * 流程节点。新增或更新
     *
     * @param flowId
     * @param flowNode
     */
    void saveNode(String flowId, FlowNode flowNode);

    /**
     * 查询一个流程的所有节点
     *
     * @param flowId
     * @return
     */
    List<FlowNode> getNodes(String flowId);

    /**
     * 查询流程的某个节点
     *
     * @param flowId
     * @param nodeId
     * @return
     */
    FlowNode getNode(String flowId, String nodeId);

}
